﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIGERP_Entidades;
using System.Data;
using System.Data.SqlClient;

namespace SIGERP_Datos
{
    public class HndCiudades
    {
        public static List<Ciudad> GetAll()
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.ciudad");
            var ciudades = new List<Ciudad>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                Ciudad c = new Ciudad(dtRow);
                c.provincia = HndProvincias.GetOne(Convert.ToInt32(dtRow["id_provincia"]));
                ciudades.Add(c);
            }
            return ciudades;
        }

        public static Ciudad GetOne(int id)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.ciudad WHERE id_ciudad=" + id);
            DataRow dtRow = tabla.Rows[0];
            Ciudad c = new Ciudad(dtRow);
            c.provincia = HndProvincias.GetOne(Convert.ToInt32(dtRow["id_provincia"]));
            return c;
        }

        public static bool verificarSiExiste(Ciudad c)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT COUNT(*) FROM dbo.ciudad WHERE descripcion='" + c.descripcion + "' and id_provincia= " + c.provincia.id);
            DataRow dtRow = tabla.Rows[0];

            bool existe = false;
            if (Convert.ToInt32(dtRow[0]) > 0) existe = true;
            return existe;
        }


        public static void Insert(Ciudad ciudad)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "INSERT INTO dbo.ciudad (descripcion,cod_postal,id_provincia) VALUES (@descripcion,@cod_postal,@id_provincia)";
            comando.Parameters.AddWithValue("@descripcion", ciudad.descripcion);
            comando.Parameters.AddWithValue("@cod_postal", ciudad.cod_postal);
            comando.Parameters.AddWithValue("@id_provincia", ciudad.provincia.id);
            Conexion.ejecutaComando(comando);
        }

        public static Boolean update(Ciudad ciudad)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.ciudad SET descripcion=@descripcion,cod_postal=@cod_postal,id_provincia=@id_provincia WHERE id_ciudad=@id_ciudad";
            comando.Parameters.AddWithValue("@descripcion", ciudad.descripcion);
            comando.Parameters.AddWithValue("@cod_postal", ciudad.cod_postal);
            comando.Parameters.AddWithValue("@id_provincia", ciudad.provincia.id);
            comando.Parameters.AddWithValue("@id_ciudad", ciudad.id);
            return Conexion.ejecutaComando(comando);
        }

        public static void delete(Ciudad ciudad)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "DELETE FROM dbo.ciudad WHERE id_ciudad=@id_ciudad";
            comando.Parameters.AddWithValue("@id_ciudad", ciudad.id);
            Conexion.ejecutaComando(comando);
        }

        public static List<Ciudad> GetAllCiudadesPorProvincia(Provincia p)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.ciudad where id_provincia=" + p.id);
            var ciudades = new List<Ciudad>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                Ciudad c = new Ciudad(dtRow);
                c.provincia = HndProvincias.GetOne(Convert.ToInt32(dtRow["id_provincia"]));
                ciudades.Add(c);
            }
            return ciudades;
        }

        public static bool verificarSiHayClientesAsociados(Ciudad c)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT COUNT(*) FROM dbo.cliente WHERE id_ciudad=" + c.id);
            DataRow dtRow = tabla.Rows[0];

            bool existe = false;
            if (Convert.ToInt32(dtRow[0]) > 0) existe = true;
            return existe;
        }

 


    }
}
